<?php 
class GoodsAttrModel extends Model{
	//商品属性表
	public $table='goods_attr';

	public function __init(){

	}

	public function get(){
		//商品类型ID
		$cat_id=Q('cat_id',0,'intval');
		//商品ID
		$gid=Q('goods_gid');
		/*
		关联属性与商品属性表
		1)没有$gid是添加，添加时只需要属性表
		2)编辑是需要属性表与商品属性表关联
		*/
		if($gid){//编辑
			$sql="select *,a.attr_value default_value,a.attr_id attr_id from attribute AS a LEFT JOIN (select * from goods_attr as ga where goods_gid={$gid}) AS c on a.attr_id=c.attr_id where a.cat_id=$cat_id";
			$attr=M()->query($sql);
		}else{//添加
			$attr=M('attribute')->field("*,attr_value default_value")->where("cat_id={$cat_id}")->all();
			// $attr=M('attribute')->where("cat_id={$cat_id}")->all();
			// p($attr);exit;
		}
		//显示方式
		$method=array(1=>'_text',2=>'_select',3=>'_textarea');

		//用来记录已经处理过的属性
		$recordAttr=array();

		foreach ($attr as $id => $goodsAttr) {
			//动作如_text、_select、_textarea,处理表单显示样式的方法
			$action=$method[$goodsAttr['attr_input_type']];
			//获得表单的显示样式
			$html=$this->$action($goodsAttr);
			//属性价格设置(只有规格属性才需要设置)
			if($goodsAttr['attr_type']==2){
				//属性价格
				$attr_price=isset($goodsAttr['attr_price'])?$goodsAttr['attr_price']:'';
				$html.="属性价格:<input type='text' name='attr_price_list[]' value='{$attr_price}'  />";
			}else{
				$html.="<input type='hidden' name='attr_price_list[]' value='0' />";
			}

			//属性attr_id表单，相当于编辑是的隐藏表单，为了记录ID值
			$html.="<input type='hidden' name='attr_id_list[]' value='{$goodsAttr['attr_id']}' />";

			$attr[$id]['html']=$html;
			/*
			规格属性设置[+]、[-]的javascript代码
			*/
			if($goodsAttr['attr_type']==2){
				// 如果$goodsAttr['attr_id']在数组$recordAttr中,说明已经处理过了
				if(in_array($goodsAttr['attr_id'], $recordAttr)){
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='removeAttr(this)'>[-]</a> ".$goodsAttr['attr_name'];					
				}else{
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='addAttr(this)'>[+]</a>".$goodsAttr['attr_name'];
				}

			}

			$recordAttr[]=$goodsAttr['attr_id'];	

		}
		return $attr;
	}

	/*
	后台添加属性
	*/
	public function addAttr($goods_gid){
		//不存在属性信息时不处理
		if(isset($_POST['attr_id_list'])){
			//最终需要添加的goods_attr表中的数据
			$data=array();
			//循环添加属性
			// p($_POST);exit;
			foreach ($_POST['attr_id_list'] as $n=>$attr_id) {
				//属性数据
				$attr_value=$_POST['attr_value_list'][$n];
				$attr_price=$_POST['attr_price_list'][$n];

				//属性值为空时不添加到商品属性表中
				if(empty($attr_value)){
					continue;
				}
				$tmp=array(
					'attr_value'=>$attr_value,  //属性值
					'attr_price'=>$attr_price,   //属性价格
					'goods_gid'=>$goods_gid,  //商品ID
					'attr_id'=>$attr_id    //属性ID
				);

				//获得属性类型 1、普通属性 2、规格属性
				$attr_type=M('attribute')->where("attr_id=$attr_id")->getField('attr_type');
				$map['goods_gid']=$goods_gid;
				$map['attr_id']=$attr_id;
				//如果某属性已经处理过了就不处理了(解决已经有绿色在添加绿色就报错)
				static $record=array();
				if($attr_type==2){
					if (in_array($attr_value, $record)) continue;
					$map['attr_value']=$attr_value;
					$record[]=$attr_value;
				}
				$id=$this->where($map)->getField('id');
				if($id){
					$tmp['id']=$id;
				}
				$data[]=$tmp;

			}			
			//删除旧字段
			$this->where("goods_gid=$goods_gid")->del();
			//添加属性
			foreach ($data as $d) {
				$this->add($d);
			}

		}else{
			return false;
		}
	}

	//文本框attr_input_type=1
	private function _text($attr){
		return "<input type='text' name='attr_value_list[]' value='{$attr['attr_value']}'/>";
	}

	//下拉列表框 attr_input_type=2
	private function _select($attr){
		$data=explode("\n", $attr['default_value']);
		$html="<select name='attr_value_list[]' >";
		foreach ($data as $d) {
			$selected=trim($attr['attr_value'])==trim($d)?" selected=''":'';
			$html.="<option $selected>{$d}</option>";
		}
		$html.="</select>";
		return $html;
	}

	//文本域 attr_input_type=3
	private function _textarea($attr){
		return "<textarea name='attr_value_list[] '>{$attr['attr_value']}</textarea>";
	}

}

?>